package bmatch.tech.file.util;

import bmatch.tech.file.model.MyDirectory;
import bmatch.tech.file.model.MyFile;

import java.util.ArrayList;
import java.util.List;

/**
 * 查询方法类
 *
 * @author: Awake
 * @date: 2018-12-02 12:56
 **/
public class Query {

    /**
     * 查询出用户的所有文件夹
     *
     * @param userId 用户主键
     * @return
     */
    public static List<MyDirectory> queryDirectoriesByUserId(String userId) {
        //从数据存储中获得用户的文件夹
        List<MyDirectory> directories = DataStore.getDirectories().get(userId);
        return directories;
    }

    /**
     * 查询出用户的所有文件
     *
     * @param userId 用户主键
     * @return
     */
    public static List<MyFile> queryFilesByUserId(String userId) {
        //从数据存储中获得用户的文件夹
        List<MyFile> files = DataStore.getFiles().get(userId);
        return files;
    }

    /**
     * 根据用户主键和路径查询所有文件夹
     *
     * @param userId 用户主键
     * @param path   路径
     * @return
     */
    public static List<MyDirectory> queryDirectoriesByPath(String userId, String path) {
        //从数据存储中获得用户的文件夹
        List<MyDirectory> allDirectories = queryDirectoriesByUserId(userId);

        if (allDirectories == null) {
            return null;
        }
        //筛选对应path内的文件夹
        List<MyDirectory> targetDirectories = new ArrayList<>();
        for (MyDirectory d : allDirectories) {
            if (d.getPath().equals(path)) {
                targetDirectories.add(d);
            }
        }

        if (targetDirectories.isEmpty()) {
            return null;
        }

        return targetDirectories;
    }

    /**
     * 根据用户主键和路径查找所有文件
     *
     * @param userId 用户主键
     * @param path   路径
     * @return
     */
    public static List<MyFile> queryFilesByPath(String userId, String path) {
        //从数据存储中获得用户的所有文件
        List<MyFile> allFiles = queryFilesByUserId(userId);

        if (allFiles == null) {
            return null;
        }
        //筛选对应path内的文件
        List<MyFile> targetFiles = new ArrayList<>();
        for (MyFile f : allFiles) {
            if (f.getPath().equals(path)) {
                targetFiles.add(f);
            }
        }
        if (targetFiles.isEmpty()) {
            return null;
        }

        return targetFiles;
    }

    /**
     * 根据用户主键和路径和名称查找文件夹
     *
     * @param userId 用户主键
     * @param path   路径
     * @param name   名称
     * @return
     */
    public static MyDirectory queryDirectory(String userId, String path, String name) {
        //查找出所有文件夹
        List<MyDirectory> directories = queryDirectoriesByUserId(userId);

        //没有文件夹
        if (directories == null)
            return null;

        for (MyDirectory directory : directories) {
            if (directory.getName().equals(name) && directory.getPath().equals(path)) {
                return directory;
            }
        }

        //没有找到文件夹
        return null;
    }

    /**
     * 根据用户主键和路径和名称查找文件
     *
     * @param userId 用户主键
     * @param path   路径
     * @param name   名称
     * @return
     */
    public static MyFile queryFile(String userId, String path, String name) {
        //查找出所有文件
        List<MyFile> files = queryFilesByUserId(userId);

        //没有找到文件
        if (files == null)
            return null;

        for (MyFile file : files) {
            if (file.getName().equals(name) && file.getPath().equals(path)) {
                return file;
            }
        }

        //没有找到文件
        return null;
    }
}
